package br.com.esrestaurante.faces;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.esrestaurante.dao.ContaDAO;
import br.com.esrestaurante.entidades.Conta;
import br.com.esrestaurante.entidades.Oferecimento;
import br.com.esrestaurante.entidades.Pedido;


public class GerarRelatorioFaces extends Faces {
	
	private Integer totalMesas = 0;
	
	private String totalArrecadado = "";
	
	private List<Conta> listaRelatorio;
	
	private boolean exibeDiario = false;
	
	private boolean exibeMensal = false;

	public boolean isExibeDiario() {
		return exibeDiario;
	}

	public void setExibeDiario(boolean exibeDiario) {
		this.exibeDiario = exibeDiario;
	}

	public boolean isExibeMensal() {
		return exibeMensal;
	}

	public void setExibeMensal(boolean exibeMensal) {
		this.exibeMensal = exibeMensal;
	}

	public GerarRelatorioFaces() {
		
		this.relatorioDiario();

	}
	
	public String relatorioDiario() {

		List<Conta> lista = new ContaDAO().listarContas();
		listaRelatorio = new ArrayList<Conta>();
		Calendar dataAtual = Calendar.getInstance();
		DecimalFormat formatador = new DecimalFormat();
		formatador.applyPattern("0.00");
		
		this.totalMesas = 0;
		Float valorTotal1 = 0f;
		for(Conta conta: lista){
			if(conta.getDataPagamento() != null &&
					conta.getDataPagamento().getTime().getDay() == dataAtual.getTime().getDay() &&
					conta.getDataPagamento().getTime().getMonth() == dataAtual.getTime().getMonth() &&
					conta.getDataPagamento().getTime().getYear() == dataAtual.getTime().getYear()){
				float valorTotal = 0f;
				conta.setListaProdutos(new ArrayList<Oferecimento>());
				for(Pedido pedido :conta.getListaPedidos()){
					if(conta.getDataEncerramento()!=null){
						valorTotal += pedido.getOferecimento().getValor() * pedido.getQuantidade();
						conta.setValorTotal(valorTotal);
						int quantidade = pedido.getQuantidade();
						for(int i = 1; i <= quantidade;i++){
							conta.getListaProdutos().add(pedido.getOferecimento());							
						}
					}
				}
				this.totalMesas++;
				this.listaRelatorio.add(conta);
				valorTotal1 += conta.getValorTotal();

			}
		}
		this.totalArrecadado = formatador.format(valorTotal1);
		
		this.exibeDiario = true;
		this.exibeMensal = false;
		
		return null;

	}
	
	public String relatorioMensal() {
		
		List<Conta> lista = new ContaDAO().listarContas();
		listaRelatorio = new ArrayList<Conta>();
		Calendar dataAtual = Calendar.getInstance();
		DecimalFormat formatador = new DecimalFormat();
		formatador.applyPattern("0.00");
		
		this.totalMesas = 0;
		Float valorTotal1 = 0f;
		for(Conta conta: lista){
			if(conta.getDataPagamento() != null &&
					conta.getDataPagamento().getTime().getMonth() == dataAtual.getTime().getMonth() &&
					conta.getDataPagamento().getTime().getYear() == dataAtual.getTime().getYear()){
				float valorTotal = 0f;
				conta.setListaProdutos(new ArrayList<Oferecimento>());
				for(Pedido pedido :conta.getListaPedidos()){
					if(conta.getDataEncerramento()!=null){
						valorTotal += pedido.getOferecimento().getValor() * pedido.getQuantidade();
						conta.setValorTotal(valorTotal);
						int quantidade = pedido.getQuantidade();
						for(int i = 1; i <= quantidade;i++){
							conta.getListaProdutos().add(pedido.getOferecimento());							
						}
					}
				}
				this.totalMesas++;
				this.listaRelatorio.add(conta);
				valorTotal1 += conta.getValorTotal();

			}
		}
		this.totalArrecadado = formatador.format(valorTotal1);
		
		this.exibeDiario = false;
		this.exibeMensal = true;
		
		return null;
	}
	
	public String cancelarAction (){
		
		return "toInicialGerente";
	}

	public Integer getTotalMesas() {
		return totalMesas;
	}

	public void setTotalMesas(Integer totalMesas) {
		this.totalMesas = totalMesas;
	}

	public String getTotalArrecadado() {
		return totalArrecadado;
	}

	public void setTotalArrecadado(String totalArrecadado) {
		this.totalArrecadado = totalArrecadado;
	}

	public List<Conta> getListaRelatorio() {
		return listaRelatorio;
	}

	public void setListaRelatorio(List<Conta> listaRelatorio) {
		this.listaRelatorio = listaRelatorio;
	}
}
